﻿using System;
using Domain.MainModule.Entities;
using System.Collections.Generic;

namespace Application.MainModule.CountriesManagement
{
    public interface ICountryManagementService
    {
        /// <summary>
        /// Add new country.
        /// </summary>
        /// <param name="employee">Country to be added</param>
        void AddCountry(Country country);

        /// <summary>
        /// Change existing country.
        /// </summary>
        /// <param name="employee">Existing country to modify.</param>
        void ChangeCountry(Country country);

        /// <summary>
        /// Find a country by its Id.
        /// </summary>
        /// <param name="countryId">CountryId</param>
        /// <returns>A Country</returns>
        Country FindCountryById(Guid countryId);

        /// <summary>
        /// Find a country by name.
        /// </summary>
        /// <param name="countryName">Country name.</param>
        /// <returns>A Country</returns>
        Country FindCountryByName(string countryName);

        /// <summary>
        /// Find a country by ISO 3166 numeric.
        /// </summary>
        /// <param name="isoNumeric">ISO 3166 numeric value.</param>
        /// <returns>A Country.</returns>
        Country FindCountryByISONumeric(string isoNumeric);

        /// <summary>
        /// Find a country by ISO 3166 alpha 3.
        /// </summary>
        /// <param name="isoAlpha3">ISO 3166 alpha 3 value.</param>
        /// <returns>A Country.</returns>
        Country FindCountryByISOAlpha3(string isoAlpha3);

        /// <summary>
        /// Find a country by ISO 3166 alpha 2.
        /// </summary>
        /// <param name="isoAlpha2">ISO 3166 alpha 2 value.</param>
        /// <returns>A Country.</returns>
        Country FindCountryByISOAlpha2(string isoAlpha2);

        IEnumerable<Country> GetAll();
    }
}
